doubleyong
管理员
管理员
  • 最后登录2025-12-02
  • 发帖数1198
  • 最爱沙发
  • 喜欢达人
  • 原创写手
  • 社区居民
  • 忠实会员
阅读:5604回复:0

[vue]vue中token的使用

楼主#
更多 发布于:2020-02-13 18:05
使用vuex与sessionStorage结合存储token
state代码:
var state = {
 token:window.sessionStorage.getItem("token")?window.sessionStorage.getItem("token"):""};

getters代码:
var getters = {
  getToken(state){
    if(state.isLogin){
      return state.token;
    }else{
      return "";
    }
  }
}

actions代码:
//定义action,要执行的操作,如流程判断,异步请求等
var actions={
  setToken({commit},token){
   commit('SetToken',token);  //与mutations里的名称对应
  }
}

mutations代码:
//处理状态的改变
var mutations={
  SetToken(state,token){  //设置token
    state.token = token;
    window.sessionStorage.setItem("token",token);
  }
}

1.登录第一次获取token
this.$axios.post("/user/login",
  {
    userName:this.username,
    userPwd:this.pwd
  }).then((res)=>{
       var token = res.data.data;
       this.$store.dispatch('setToken',res.data.data);//设置token
       this.$route.push("/home");
  })

2.之后每次请求都要提交token
// 拦截Axios发起的所有请求,给请求添加token
Axios.interceptors.request.use(
  config => {
    vm.$store.dispatch('loadingStart'); // 显示loading组件
    if (store.getters.getToken) {  // 判断是否存在token,如果存在的话,则每个http header都加上token
       config.headers['Authorization'] = store.getters.getToken;
    }else{
       config.headers['Authorization'] = '';
    }
    return config;
  },
  err => {
    return Promise.reject(err);
  });

3.每次响应回来都要重新token
Axios.interceptors.response.use((config)=>{
  vm.$store.dispatch('loadingEnd');
  if(config.data.token){
    vm.$store.dispatch('setToken',config.data.token);
  }
  return config
})

Q:刷新页面怎么办?
A:刷新页面,vuex会初始化,但是我们初始化先判断的是sessionStorage的token是否存在,存在则将sessionStorage的token进行记取,解决了vuex刷新后更新的问题。
注:token的修改与sessionStorage的token值一定要操作同步

原创文章,转载请出处:
bug收集
网址:http://bugshouji.com/shareweb/t1034

最新喜欢:

愤怒的小醒目愤怒的小醒目
知识需要管理,知识需要分享
游客


返回顶部

公众号

公众号